package com.ubxtech.wecom.service.impl;

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSONObject;
import com.ubxtech.core.exception.RRException;
import com.ubxtech.wecom.service.WecomTokenService;
import com.ubxtech.wecom.util.WecomMsgUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Victor.Xiao
 * @since 2023-12-15 14:03
 **/
@Slf4j
public class WecomTokenServiceImpl implements WecomTokenService {

    /**
     * 获取企业微信token的方法,默认每次都请求最新,可以自定义bean,请求放入缓存
     *
     * 每企业调用单个cgi/api不可超过1万次/分，15万次/小时
     * 每ip调用单个cgi/api不可超过2万次/分，60万次/小时
     * 第三方应用提供商每ip调用单个cgi/api不可超过4万次/分，120万次/小时
     * @author Victor.Xiao
     * @since 2023-12-15 14:04
     * @param corpid corpid
     * @param corpsecret corpsecret
     * @return java.lang.String
    */
    @Override
    public String getToken(String corpid, String corpsecret,String tokenUrl) {
        if (StrUtil.isBlank(corpid) || StrUtil.isBlank(corpsecret) ) {
            throw new RRException("wecom config error");
        }
        Map<String, Object> queries = new HashMap<>();
        queries.put("corpid", corpid);
        queries.put("corpsecret", corpsecret);
        String body = HttpUtil.get(tokenUrl, queries, WecomMsgUtil.TIMEOUT_MILL);
        JSONObject jsonObject = JSONObject.parseObject(body);
        WecomMsgUtil.checkWecomResp(jsonObject);
        String value = jsonObject.getString("access_token");
        if (StrUtil.isBlank(value)) {
            log.error("请求企业微信token有误,{}",jsonObject);
            throw new RRException("请求企业微信token有误");
        }
        return value;
    }
}
